import java.util.concurrent.atomic.AtomicInteger;

public class ThreadCAS {
    public static void main(String[] args) throws InterruptedException {
        // 原子类就是 基于 CAS 实现了 自增,自减的操作,此时这里操作不需要加锁,也是线程安全的
        AtomicInteger count = new AtomicInteger(0);  // 定义一个原子类的Integer  count
        // 原子类是由一组的 AtomicBoolean
        // AtomicInteger
        // AtomicIntegerArray
        // AtomicLong
        // AtomicReference
        // AtomicStampedReference

        // 使用原子类 解决线程安全问题

        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                // 因为java 不支持运算符重载,所以只能使用普通方法来表示自增自减
                count.getAndIncrement(); // count++
              //  count.incrementAndGet(); // ++count
//                count.getAndDecrement(); // count--
//                count.decrementAndGet(); // --count
            }
        });

        Thread t2 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                count.getAndIncrement();
            }
        });

        t1.start();
        t2.start();
        t1.join();
        t2.join();

        System.out.println(count.get()); // 结果妥妥的是 2000
    }
}
